﻿========================================================================
  出前署名（直接請求 署名収集支援）  Version 0.5.0
========================================================================

  ソフト名     : 出前署名（直接請求 署名収集支援）
  バージョン   : 0.5.0
  作 者        : highdefinitionaudiodriver
  動作環境     : Windows 10/11, macOS 12+, Linux (Ubuntu 20.04+) / Node.js 20 以上
  ライセンス   : MIT License（フリーソフト／オープンソース）
  種 別        : フリーソフト
  作成日       : 2026-06-12

------------------------------------------------------------------------
■ ソフトの説明 / 使用方法（README より）
------------------------------------------------------------------------

出前署名（Demae-Shomei）

地方自治法の直接請求（リコール＝解職・解散請求、条例の制定・改廃請求）における署名収集オペレーション支援の参考実装です。

署名したい有権者がアプリから「訪問」を注文すると、受任者（署名収集員）が署名簿を持って自宅へ伺う——
フードデリバリーの配車モデル（注文→受諾→ETA→到着→完了）を、法定署名運動に適用しました。

これは何をしないか（先に読んでください）

- 電子署名はできません。 署名は紙の署名簿への本人の自署のみ有効です。本システムは訪問の手配と筆数の集計だけを行います。
- 署名者の氏名・生年月日を扱いません。 それらは紙にのみ書かれ、アプリに入力欄がありません。
- 選挙人名簿のデータは扱いません。
- 報酬・対価の機能はありません。 署名に関する利益誘導は処罰対象です（地方自治法74条の4）。受任者はボランティア前提です。
- 本リポジトリは参考実装であり法的助言ではありません。実際の運用は弁護士・選挙管理委員会に確認してください。

主な機能

- 法定署名数の自動計算（1/3、40万・80万超の緩和規定、条例請求の1/50）
- 署名収集期間の自動管理（市町村1か月／都道府県・指定都市2か月、期間外は注文不可）
- 選挙期間中の収集停止（blackout登録で注文ブロック・一覧非表示）
- 出前署名の配車（SMS認証 → 注文 → 受諾で初めて住所開示 → ETA → 到着時の相互確認コード照合 → 筆数報告）
- E2EE封緘（v0.2）: 注文者の住所・電話は資格を持つ受任者の公開鍵へ端末上で暗号化され、
  運営サーバは平文を一度も保持しない（WebCryptoのみ・依存ゼロ。復号は受任者端末の秘密鍵でのみ可能）
- バッチング配車（v0.2）: 同じ地区×日付の注文を1ルートに集約し、まとめて受諾（≦8件）
- 投票フェーズ管理（v0.2）: 解職投票の段階に入ったら注文・配車・筆数報告を全停止
  （公選法準用により戸別訪問による投票勧誘が禁止されるため）
- 完了・キャンセル時に住所・電話番号（E2EE封筒含む）を自動消去（残るのは町丁目コードと筆数のみ）
- 戸別・街頭・拠点チャネルの筆数報告と、地区別・チャネル別ダッシュボード（必要ペース逆算）
- 受任者の承認制（受任者証番号）・資格チェック（自治体／議員解職は選挙区）
- PIIを含まない追記専用監査ログ
- 訪問順ルート最適化（v0.3）: 注文者が任意共有した「おおよその位置」（E2EE封筒内のみ・サーバ非可視）を
  受任者端末で復号し、端末内で最近傍＋2-optの訪問順を計算
- Googleマップ連携（v0.4）: APIキー不要のURLスキーム方式。個別訪問先の地図表示と、
  最適化した訪問順そのままの経由地付きナビを受任者の端末から起動
  （サーバはGoogleに何も送信しない。リンクを開くと端末からGoogleへ住所/座標が送られる旨をUIに明示）
- 本番運用スイッチ（v0.3): SMSは差替式（Twilio資格情報で実送信・devCode非表示）、
  職員は POST /api/auth/login のBearerトークン認証（ALLOW_DEV_HEADERS=0 で開発ヘッダ無効化）

デモ環境

- LP: https://demae-shomei.pages.dev/
- デモ（β）: https://demae-shomei-demo.highdefinitionaudiodriver.workers.dev/

デモはCloudflare Workers上で動作します。DEMAE_STORAGE=memory によりデータはインメモリ保持
（ファイルを書かない・不定期に消去）、SMSはモック（認証コードが画面に表示される）です。
実在の個人情報を入力しないでください。 デプロイは:


npx wrangler deploy --config wrangler.demo.jsonc   # 要 wrangler login
npx wrangler pages deploy site --project-name demae-shomei --branch main --commit-dirty=true  # LP


起動


npm start          # http://localhost:8090
npm test           # node:test（法定数境界値・ステートマシン・法令ガード・個人情報消去）
npm run check      # 構文チェック


開発時の職員APIはヘッダ x-user-roles: ADMIN,CLERK で認可できます。本番運用では：


ALLOW_DEV_HEADERS=0                       # 開発ヘッダを無効化
DEMAE_STAFF_USERS='{"jimu":{"password":"...","roles":["ADMIN","CLERK"]}}'  # 職員アカウント（パスワード式）
TWILIO_ACCOUNT_SID=... TWILIO_AUTH_TOKEN=... TWILIO_FROM=+81...            # SMS実送信（未設定ならモック）
DEMAE_SECRET=...                          # トークン署名鍵

職員OIDC連携（任意・設定するとUIに「組織アカウントでログイン」が出る）
DEMAE_OIDC_ISSUER=https://idp.example.com
DEMAE_OIDC_CLIENT_ID=demae-shomei
DEMAE_OIDC_CLIENT_SECRET=...              # 任意（PKCEは常時併用）
DEMAE_OIDC_STAFF='{"jimu@example.com":["ADMIN","CLERK"]}'  # 許可リスト（email→roles）
DEMAE_BASE_URL=https://app.example.com    # コールバックURLの組み立てに使用


を設定し、職員は POST /api/auth/login でBearerトークン（8時間）を取得します。
SMSモック時のみ応答に devCode が含まれます。

構成


apps/api/legal.mjs    法令コア（法定数・期間・停止期間）
apps/api/server.mjs   API（配車ステートマシン・法令ガード・purge・監査・フェーズ管理）
apps/web/crypto.mjs   E2EEモジュール（WebCrypto: ECDH P-256＋HKDF＋AES-GCM、ブラウザ/Node共用）
apps/web/             バニラJS SPA（市民／受任者／事務局）
tests/                node:test 一式（E2EE往復・サーバ非保持のディスク検証を含む）
docs/                 00_概要設計 / 01_法令対応 / 02_画面設計 / 03_データ設計 / 04_機能一覧


ライセンス

MIT

------------------------------------------------------------------------
■ 動作環境
------------------------------------------------------------------------
  Windows 10/11, macOS 12+, Linux (Ubuntu 20.04+) / Node.js 20 以上
  ※ オンライン専用ソフトではありません（ローカル環境で動作します）。

------------------------------------------------------------------------
■ インストール / アンインストール
------------------------------------------------------------------------
  ・本アーカイブを任意のフォルダに展開してください。
  ・詳細な起動手順は上記「ソフトの説明」および同梱の README を参照してください。
  ・アンインストールは展開したフォルダを削除するだけです（レジストリ不使用）。

------------------------------------------------------------------------
■ 転載・再配布について
------------------------------------------------------------------------
  本ソフトは MIT License のオープンソースです。同梱の LICENSE 条文に
  従う限り、自由に利用・改変・再配布できます。
  なお Vector 以外の配布サイトへの無断転載はご遠慮ください。

------------------------------------------------------------------------
■ 免責事項
------------------------------------------------------------------------
  本ソフトの使用によって生じたいかなる損害についても、作者は一切の
  責任を負いません。利用者ご自身の責任においてご使用ください。

------------------------------------------------------------------------
■ 著作権
------------------------------------------------------------------------
  Copyright (c) 2026 highdefinitionaudiodriver
  本ソフトは MIT License の下で公開されています。

------------------------------------------------------------------------
■ 連絡先 / サポート
------------------------------------------------------------------------
  作 者        : highdefinitionaudiodriver
  E-mail       : highdefinitionaudiodriver@gmail.com
  GitHub       : https://github.com/highdefinitionaudiodriver/demae-shomei.git
  不具合報告・ご要望は上記 E-mail もしくはリポジトリの Issues へ
  お願いいたします。

========================================================================
